<?php
/**
 * Created by PhpStorm.
 * User: zhangrxiang
 * Date: 1/16/17
 * Time: 12:52 PM
 */

//Integer 整型
//一个 integer 是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的一个数。
//整型值可以使用十进制，十六进制，八进制或二进制表示，前面可以加上可选的符号（- 或者 +）。
//要使用八进制表达，数字前必须加上 0（零）。
//要使用十六进制表达，数字前必须加上 0x。
//要使用二进制表达，数字前必须加上 0b。

$a = 1234; // 十进制数
echo $a.PHP_EOL;
$a = -123; // 负数
echo $a.PHP_EOL;
$a = 0123; // 八进制数 (等于十进制 83)
echo $a.PHP_EOL;
$a = 0x1A; // 十六进制数 (等于十进制 26)
echo $a.PHP_EOL;

//decimal     : [1-9][0-9]*
//            | 0
//hexadecimal : 0[xX][0-9a-fA-F]+
//octal       : 0[0-7]+
//binary      : 0b[01]+
//integer     : [+-]?decimal
//| [+-]?hexadecimal
//| [+-]?octal
//| [+-]?binary

//整数溢出

$large_number = 2147483647;
var_dump($large_number);                     // int(2147483647)

$large_number = 2147483648;
var_dump($large_number);
var_dump(PHP_INT_MAX);
var_dump(PHP_INT_MAX+1);
$million = 1000000;
$large_number =  50000 * $million;
var_dump($large_number);

//PHP 中没有整除的运算符。1/2 产生出 float 0.5。
//值可以舍弃小数部分强制转换为 integer，或者使用 round() 函数可以更好地进行四舍五入。
var_dump(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
//todo?????
//floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8，
//因为该结果内部的表示其实是类似 7.9999999999999991118...。
var_dump(  (int) ( (0.1 + 0.7) * 10 ) ); // 显示 7!
var_dump(  (int) ( (0.1 + 0.6) * 10 ) ); // 显示 7!
var_dump(  (int) ( (0.2 + 0.7) * 10 ) ); // 显示 9!



///////////////////////////////////////////

$i = 6887129852;
echo "i=$i\n";
echo "i%36=".($i%36)."\n";
echo "alternative i%36=".($i-floor($i/36)*36)."\n";